package br.com.edoc.controller.cadastro;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.edoc.controller.listagem.ListagemMenuFolhaController;
import br.com.edoc.controller.listagem.ListagemModuloController;
import br.com.edoc.controller.listagem.ListagemPerfilController;
import br.com.edoc.entidade.MenuFolha;
import br.com.edoc.entidade.Modulo;
import br.com.edoc.entidade.Perfil;
import br.com.edoc.entidade.PermissaoUsuario;
import br.com.edoc.excecoes.ExceptionApplication;
import br.com.edoc.excecoes.ExceptionValidador;
import br.com.edoc.gerentes.GerenteControleAcesso;
import br.com.edoc.inicializador.InicializadorPerfil;

import br.com.edoc.ouvinte.OuvinteSelecao;
@ManagedBean(name="cadastroPerfil")
@SessionScoped
public class CadastroPerfilController extends CadastroPadraoController {
	/**
	 * 
	 */
	private static final long serialVersionUID = 5184926979455496517L;
	private Perfil perfil;
	private PermissaoUsuario permissao;
	public void excluirPermissao(){
		getPerfil().getListaPermissoes().remove(getPermissao());
		setPermissao(null);
	}
	public void addPerfil(){
		if(!getPerfil().getListaPermissoes().contains(getPermissao())){
			getPermissao().setPerfil(getPerfil());
			getPerfil().getListaPermissoes().add(getPermissao());
			setPermissao(null);
		}else{
			if(getPermissao().getIncluir()!=null){
				getPerfil().getListaPermissoes().set(getPerfil().getListaPermissoes().indexOf(getPermissao()), getPermissao());
				setPermissao(null);
			}else
				addAlertMessage("Este menu já existe na lista de permissões ");
		}
	}
	public void mostrarListagemModulo(){
		ListagemModuloController listagem = new ListagemModuloController();
		Modulo query = new Modulo();
		query.setNome(getPerfil().getModulo().getNome());
		listagem.setQuery(query);
		listagem.setOuvinteSelecao(new OuvinteSelecao() {

			@Override
			public void selecaoFeita(Object object) {
				// TODO Auto-generated method stub
				getPerfil().setModulo((Modulo) object);
			}
		});
		showInFormPopUp("listagemModulos");
	}

	public void mostrarListagemMenuFolha(){
		ListagemMenuFolhaController listagemMenu = new ListagemMenuFolhaController();
		MenuFolha query = new MenuFolha();
		query.setDescricao(getPermissao().getMenu().getDescricao());
		if(getPerfil().getModulo()!=null && getPerfil().getModulo().getId()!=null){
			query.setModulo(getPerfil().getModulo());
		}
		listagemMenu.setQuery(query);
		listagemMenu.setOuvinteSelecao(new OuvinteSelecao() {

			@Override
			public void selecaoFeita(Object object) {
				// TODO Auto-generated method stub
				getPermissao().setMenu((MenuFolha) object);
			}
		});
		showInFormPopUp("listagemMenu");
	}

	public void mostrarListagemPerfil(){
		ListagemPerfilController listagemPerfil = new ListagemPerfilController();
		Perfil query = new Perfil();
		query.setDescricao(getPerfil().getDescricao());
		listagemPerfil.setQuery(query);
		listagemPerfil.setOuvinteSelecao(new OuvinteSelecao() {

			@Override
			public void selecaoFeita(Object object) {
				// TODO Auto-generated method stub
				setPerfil((Perfil) (new InicializadorPerfil()).inicializar(object));
			}
		});
		showInFormPopUp("listagemPerfil");
	}
	@Override
	public void acaoInserir() {
		// TODO Auto-generated method stub
		GerenteControleAcesso gc = (GerenteControleAcesso) getAtendente().chamaGerenteControleAcesso();
		try {
			gc.incluir(getPerfil());
			addInfoMessage("Perfil cadastro com sucesso");
		} catch (ExceptionApplication e) {
			// TODO Auto-generated catch block
			addErroMessage(e.getMessage());
		} catch (ExceptionValidador e) {
			// TODO Auto-generated catch block
			addErroMessage(e.getMessage());
		}
	}
	public void acaoLimpar(){
		setPerfil(null);
		setPermissao(null);
	}

	@Override
	public void acaoAlterar() {
		// TODO Auto-generated method stub
		GerenteControleAcesso gc = (GerenteControleAcesso) getAtendente().chamaGerenteControleAcesso();
		try {
			gc.alterar(getPerfil());
			addInfoMessage("Perfil alterado com sucesso");
		} catch (ExceptionApplication e) {
			// TODO Auto-generated catch block
			addErroMessage(e.getMessage());
		} catch (ExceptionValidador e) {
			// TODO Auto-generated catch block
			addErroMessage(e.getMessage());
		}
	}

	@Override
	public void acaoRemover() {
		// TODO Auto-generated method stub
		GerenteControleAcesso gc = (GerenteControleAcesso) getAtendente().chamaGerenteControleAcesso();
		try {
			gc.deletar(getPerfil());
			addInfoMessage("Perfil excluído  com sucesso");
		} catch (ExceptionApplication e) {
			// TODO Auto-generated catch block
			addErroMessage(e.getMessage());
		} 
	}
	public Perfil getPerfil() {
		if(perfil==null){
			perfil = new Perfil();
		}
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public PermissaoUsuario getPermissao() {
		if(permissao == null){
			permissao = new PermissaoUsuario();
		}
		return permissao;
	}

	public void setPermissao(PermissaoUsuario permissao) {
		this.permissao = permissao;
	}



}
